package com.example.service.impl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.dao.ProjectInfoMapper;
import com.example.dao.UxJbcardMapper;
import com.example.dao.UxenglstMapper;
import com.example.dao.UxpmStckMapper;
import com.example.dao.UxtpMapper;
import com.example.dao.UxmadsMapper;
import com.example.entity.JOBCard;
import com.example.entity.JobcardWeIdListPI;
import com.example.entity.JobcardWeIdListST;
import com.example.entity.MaterialPart;
import com.example.entity.PartMaterialDetail;
import com.example.entity.ProjectShell;
import com.example.entity.RequiredMaterialDetail;
import com.example.entity.SchedulePlanEngineering;
import com.example.entity.SurplusMaterial;
import com.example.exchange.MapUtils;
import com.example.exchange.ServiceUtil;
import com.example.exchange.XMLHeaderConstants;
import com.example.util.XMLResUtil;
import com.example.service.AutoJobcArdServer;

import com.example.exchange.UnifierWebServicesUfbs;

@Service
public class AutoJobcArdEIServerImpl extends Util implements AutoJobcArdServer {

	@Autowired
	private UxenglstMapper uxenglstMapper;
	@Autowired
	private UxpmStckMapper uxpmStckMapper;
	@Autowired
	private UxJbcardMapper uxJbcardMapper;
	@Autowired
	private ProjectInfoMapper projectInfoMapper;
	@Autowired
	private UxtpMapper uxtpMapper;
	@Autowired
	private UxmadsMapper uxmadsMapper;

	/**
	 * 
	 * 根据备料优先级自动备料
	 * 
	 * @throws IOException
	 */
//	public void auto_IssuedJobcard_EI() throws IOException {
//
//		List<Map<String, String>> projectInfoMaps = projectInfoMapper.select_ProjectID_Number(); // 查找出所有项目
//
//		for (Map<String, String> projectInfoMap : projectInfoMaps) { // 遍历项目
//
//			Object object = projectInfoMap.get("PID");
//			int projectId = Integer.parseInt(String.valueOf(object));
//			List<Integer> MaterPri1s = uxJbcardMapper.selectJobcardPriority_MaterPri(projectId, "uxmppei"); // 查出第一序列备料优先级
//			for (Integer MaterPri1 : MaterPri1s) { // 循环第一序列
//
//				boolean is = false; // 用于判断是否开启后续大组的备料
//
//				List<Map<String, String>> datas = uxJbcardMapper.selectjobcard_MaterialPreparationEI(projectId,
//						MaterPri1);// 查出所有未下发的Jobacrd
//				for (Map<String, String> data : datas) {// 遍历序列中的备料单
//
//					if (data.get("DRAWING_NO") == null || data.get("JOBC_RECORD_NO") == null) {
//						// 无图纸信息或无预Jobcard 则结束此序列备料
//						if (is == false) {
//							is = true;
//						}
//
//						continue;
//					}
//
//					if (data.get("MATERIAL_STATUS").equals("NOK") && data.get("DRAWING_CATEGORY").equals("shop")) {// 如果未备料
//
//						List<String> materialSorts = uxJbcardMapper.select_jobcard_material_sort(projectId,
//								data.get("DRAWING_NO"), data.get("REV"));
//
//						if (materialSorts.contains("part")) { //
//							List<Map<String, String>> material_quantitys = uxpmStckMapper
//									.selectDrawingNo_material_quantity(data.get("DRAWING_NO"), data.get("REV"),
//											projectId); // 查出次图所有零件所需的母材数量
//
//							List<Map<String, String>> materials = uxpmStckMapper
//									.select_bulk_ACTIVE_QTY_Map(material_quantitys, projectId); // 查出库存拥有母材数量
//
//							boolean materialIs = false;
//
//							for (Map<String, String> quantity : material_quantitys) {
//								for (Map<String, String> material : materials) {
//									if (material.get("MATERIAL_CODE").equals(quantity.get("MATERIAL_CODE"))) {
//										Object QUANTITY = quantity.get("QUANTITY");
//										Object ACTIVE_QTY = material.get("ACTIVE_QTY");
//										Object STCKID = material.get("ID");
//										quantity.put("TOTAL_QTY",QUANTITY.toString());
//										quantity.put("STCKID",STCKID.toString());
//
//										if (Double.valueOf(ACTIVE_QTY.toString()) >= Double
//												.valueOf(QUANTITY.toString())) {
//											materialIs = true;
//										} else { // 判断这根电缆要是有使用余料则直接过
//											materialIs = false;
//											if (is == false) {
//												is = true;
//											}
//											break;
//										}
//									}
//								}
//
//								if (materialIs == false) {
//									break;
//								}
//
//							}
//
//							if (materialIs) { // 为构件相关的套料图进行备料
//								jobcardPushWorkflowAfterMaterialPreparationIsCompleted(
//										data.get("JOBC_RECORD_NO"), projectInfoMap.get("PROJECTNUMBER"),
//										material_quantitys);
//							} else if (is == false) {
//								is = true;
//							}
//
//
//
//						} else if (materialSorts.contains("fabrication")) {
//							// 查出布置图中的构件图 循环每个构件 是否满足
//							List<Map<String, String>> fabrications = uxJbcardMapper
//									.select_drawingList_fabrication(projectId, data.get("DRAWING_NO"), data.get("REV"));
//
//							for (Map<String, String> fabrication : fabrications) {
//
//								if (fabrication.get("MATERIAL_STATUS").equals("OK")) {
//									continue;
//								}
//
//								if (is == false) {
//									is = true;
//								}
//
//								// 查询图纸所需零件
//								List<Map<String, String>> parts = uxJbcardMapper
//										.selectjobcard_MaterialPreparation_Fabrication_Part(projectId, "EI",
//												fabrication.get("DRAWING_NO"), fabrication.get("REV"));
//
//								List<String> partNos = new ArrayList<String>();
//
//								for (Map<String, String> index : parts) {
//									Object NO = index.get("NO"); // BigDecimal 要先转为Object
//									int projectNO = Integer.parseInt(String.valueOf(NO));
//									if (projectNO > 0) { // 如果齐全则往下备料
//										partNos.add(index.get("MATERIAL_CODE"));// 收集无库存的零件编码
//									}
//								}
//
//								if (partNos.size() > 0) {// 零件库存不满足
//
//									List<Map<String, String>> nestings = uxJbcardMapper
//											.selectjobcard_NestingST_PartNo(projectId, partNos); // 获得未备料的套料jobcard
//									for (Map<String, String> nesting : nestings) {
//										boolean bulkis = true;
//										List<Map<String, String>> bulks = null;
//
//										bulks = uxJbcardMapper.selectjobcard_MaterialPreparationST_Nesting_remnant(
//												projectId, nesting.get("DRAWING_NO"), nesting.get("REV")); // 查出 是否备料齐全
//										if (bulks.isEmpty()) {// 如果套料图使用的是余料的话则直接满足
//											bulks = uxJbcardMapper.selectjobcard_MaterialPreparationST_Nesting_bulk(
//													projectId, nesting.get("DRAWING_NO"), nesting.get("REV")); // 查出
//																												// 是否备料齐全
//											for (Map<String, String> index : bulks) {
//												Object NO = index.get("NO"); // BigDecimal 要先转为Object
//												int projectNO = Integer.parseInt(String.valueOf(NO));
//												if (projectNO > 0) { // 如果齐全则往下备料
//													if (is == false) {
//														is = true;
//													}
//													bulkis = false;
//													continue;
//												}
//											}
//										}
//
//										if (bulkis) { // 为构件相关的套料图进行备料
//											jobcardPushWorkflowAfterMaterialPreparationIsCompleted(
//													data.get("JOBC_RECORD_NO"), projectInfoMap.get("PROJECTNUMBER"),
//													bulks);
//										} else if (is == false) {
//											is = true;
//										}
//
//									}
//								} else {// 如果构件的零件满足则对构件进行备料并推动工作流节点
//									jobcardPushWorkflowAfterMaterialPreparationIsCompleted(data.get("JOBC_RECORD_NO"),
//											projectInfoMap.get("PROJECTNUMBER"), parts);
//									continue; // 结束此序列的备料（第一序列）
//								}
//
//							}
//
//						} else if (materialSorts.contains("bulk")) {
//
//							List<Map<String, String>> bulks = uxJbcardMapper
//									.selectjobcard_MaterialPreparationEI_Shop_bulk(projectId, data.get("DRAWING_NO"),
//											data.get("REV")); // 查出所有未下发的Jobacrd 是否备料齐全
//
//
//							boolean bulkis = true;
//							for (Map<String, String> index : bulks) {
//								Object NO = index.get("NO"); // BigDecimal 要先转为Object
//								int projectNO = Integer.parseInt(String.valueOf(NO));
//								if (projectNO > 0) { // 如果齐全则往下备料
//									bulkis = false;
//									break;
//								}
//							}
//								if (bulkis) {//如果所有所需母材都足够
//									jobcardPushWorkflowAfterMaterialPreparationIsCompleted(data.get("JOBC_RECORD_NO"),
//											projectInfoMap.get("PROJECTNUMBER"), bulks);
//								} else {
//									if (is == false) {
//										is = true;
//									}
//								}
//
//						}
//					}
//				}
//
////				if (is) {
////					break;
////				}
//
//			}
//		}
//	}

	/**
	 * 自动生成 电仪专业下切 组队Jobcard
	 * 
	 * @throws IOException
	 */
//	public void auto_GenerateJobcard_EI() throws IOException {
//
//		List<SchedulePlanEngineering> list = uxenglstMapper.selectUxenglstJobcArdEI();
//
//		for (SchedulePlanEngineering index : list) {
//			// logger.info("抓取到一条符合条件的图纸：" + index.getDrawing_No());
//			// 2-创建一个JOBCard空记录
//			JOBCard jobcard = new JOBCard();
//			// 3-取BP自带项目信息CODE & NAME
//			// 原DRAW包括项目信息，后取消两要素，WEBSERVICE 方法直接输入Project_ID
//			ProjectShell project = projectInfoMapper.select_ProjectShellDetail(index.getProject_id());
//			// 赋值JB 编号，对应合同号，业主
//			jobcard.setContract_No(project.getContractNo()); // 合同号
//			jobcard.setClient(project.getClient());// 客户
//			// 赋值JB 模块号，专业，工序，工作车间 ,工作包号
//			jobcard.setWork_Package_No(index.getWork_Package_No());
//			jobcard.setModule_Number(index.getModule_Name());
//			jobcard.setDiscipline(index.getDiscipline());
//			jobcard.setWork_Location(jobcard.getDiscipline() + " Workshop");
//			// 更新图纸及版本信息
//			jobcard.setDrawing_No(index.getDrawing_No());
//			jobcard.setDrawing_Name(jobcard.getDrawing_No());
//			jobcard.setDrawing_Version(index.getRev());
//
//			if (index.getDrawing_Category().equals("nesting")) {
//				// 查询物料库存即时库存数据
//				// 根据draw（套料图含图纸编号和版本）找到母材，关联即时库存表进而查询得到
//				List<RequiredMaterialDetail> requiredMaterials = new ArrayList<RequiredMaterialDetail>();
//				List<SurplusMaterial> surplusMaterials = new ArrayList<SurplusMaterial>();
//
//				surplusMaterials = uxpmStckMapper.selectUxpmstck_Drawing_No_Remnant(index.getDrawing_No(),
//						index.getRev(), project.getProjectObjectid()); // 查询套料图关联的余料
//				if (surplusMaterials.size() > 0) {// 如果没有余料则 查询母材
//					jobcard.setMaterial_Progress("100%");
//					jobcard.setMaterial_Status("Preparing");
//				} else {
//					requiredMaterials = uxpmStckMapper.selectUxpmstck_Drawing_No_bulk(index.getDrawing_No(),
//							index.getRev(), project.getProjectObjectid()); // 查询母材
//					// 根据上述数量计算当前材料 准备进展%
//					jobcard.setMaterial_Progress("0%");
//					jobcard.setMaterial_Status("Preparing");
//				}
//
//				// jobcard 查询产生零件
//				List<PartMaterialDetail> partMaterialDetails = uxpmStckMapper
//						.select_UxmatepPartList(index.getDrawing_No(), index.getRev(), project.getProjectObjectid());
//
//				jobcard.setJOBCard_No(index.getModule_Name() + "-" + index.getWork_Package_No() + "-ST" + "-MAC");
//
//				jobcard.setWorking_Procedure("cut");// 为jobcard 选定 工序
//
//				insertJobcArdST(project.getProjectNumber(), index, jobcard, partMaterialDetails, requiredMaterials,
//						null, surplusMaterials, null);// 创建JobcArd
//
//			} else if (index.getDrawing_Category().equals("fabrication")) { // 图纸类型是 预制图类型的话 构架图
//
//				// 预制图同时创建 组队与焊接jobcArd
//
//				// 生成组队 JObcard
//				jobcard.setJOBCard_No(index.getModule_Name() + "-" + index.getWork_Package_No() + "-ST-" + "F&U");
//				insertJobcArdFabricationEI(project.getProjectNumber(), "fitup", index, jobcard, null);
//				// 生成焊接 JObcard
//				jobcard.setJOBCard_No(index.getModule_Name() + "-" + index.getWork_Package_No() + "-ST-" + "V/S");
//				insertJobcArdFabricationEI(project.getProjectNumber(), "weld", index, jobcard, null);
//
//			} else if (index.getDrawing_Category().equals("shop")) { // 图纸类型是安装类型的话
//
//				String Jobcard_NO = "-WP-PI-ERE";
//				jobcard.setJOBCard_No(Jobcard_NO);
//				jobcard.setMaterial_Progress("0%");
//				jobcard.setMaterial_Status("Preparing");
//				jobcard.setWorking_Procedure("install");// 为jobcard 选定 工序
//				jobcard.setJOBCard_No(jobcard.getModule_Number() + "-WP-EI-F&U");
//
//				List<RequiredMaterialDetail> requiredMaterials = uxpmStckMapper
//						.selectUxpmstck_Drawing_No_bulk(index.getDrawing_No(), index.getRev(), index.getProject_id()); // 查询母材
//
//				List<PartMaterialDetail> partMaterialDetails = uxpmStck
//						.selectUxpmstck_Drawing_No_Part3(index.getDrawing_No(), index.getRev(), index.getProject_id()); // 查询加设图所需的零件
//				partMaterialDetails.addAll(uxpmStck.selectUxpmstck_Drawing_No_FabricationPI(index.getDrawing_No(),
//						index.getRev(), index.getProject_id())); // 查询所需的构件
//
//				List<SurplusMaterial> surplusMaterials = uxpmStckMapper.selectUxpmstck_Drawing_No_Remnant(
//						index.getDrawing_No(), index.getRev(), index.getProject_id()); // 查询 余料
//
//				insertJobcArdEI(project.getProjectNumber(), index, jobcard, partMaterialDetails, requiredMaterials,
//						null, surplusMaterials, null);
//
//			}
//
//		}
//	}

}
